package ofdinv

// InvoiceType 表示发票类型枚举，用于区分不同类型的发票
type InvoiceType string

const (
	InvoiceTypeVAT       InvoiceType = "vat"       // 增值税发票，适用于普通商品和服务交易
	InvoiceTypeTransport InvoiceType = "transport" // 货物运输发票，适用于货物运输服务业务
	InvoiceTypeUnknown   InvoiceType = "unknown"   // 未知类型，用于无法识别的发票格式
)

// InvoiceInfo 表示通用发票信息结构，包含所有类型发票的共享字段和特定业务字段
type InvoiceInfo struct {
	Type                 InvoiceType        `json:"type"`                        // 发票类型，标识发票的业务类别
	SpecificBusinessType string             `json:"specificBusinessType"`        // 特定业务类型，标识发票的特殊业务属性
	InvoiceNumber        string             `json:"invoice_number"`              // 发票号码，发票的唯一标识号码
	InvoiceDate          string             `json:"invoice_date"`                // 开票日期，发票开具的具体日期
	BuyerName            string             `json:"buyer_name"`                  // 购买方名称，购买商品或服务的单位或个人
	BuyerTaxID           string             `json:"buyer_tax_id"`                // 购买方纳税人识别号，购买方的税务登记号码
	SellerName           string             `json:"seller_name"`                 // 销售方名称，提供商品或服务的单位或个人
	SellerTaxID          string             `json:"seller_tax_id"`               // 销售方纳税人识别号，销售方的税务登记号码
	TotalAmount          string             `json:"total_amount"`                // 合计金额，不含税的金额总计
	TotalTax             string             `json:"total_tax"`                   // 合计税额，应缴纳的增值税总额
	TotalAmountWithTax   string             `json:"total_amount_with_tax"`       // 价税合计，包含税额的总金额
	Drawer               string             `json:"drawer"`                      // 开票人，实际开具发票的人员姓名
	Note                 string             `json:"note"`                        // 备注，发票的附加说明信息
	Items                []VATItem          `json:"items,omitempty"`             // 商品明细数组，增值税发票的商品或服务明细列表
	TransportDetails     []TransportDetails `json:"transport_details,omitempty"` // 运输明细数组，货物运输发票的运输信息明细列表
}

// VATItem 表示增值税发票商品明细项，定义单个商品或服务的详细信息
type VATItem struct {
	Name      string  `json:"name"`       // 项目名称，商品或服务的具体名称
	Spec      string  `json:"spec"`       // 规格型号，商品的技术规格或型号信息
	Unit      string  `json:"unit"`       // 单位，商品或服务的计量单位
	Quantity  float64 `json:"quantity"`   // 数量，商品或服务的具体数量
	UnitPrice float64 `json:"unit_price"` // 单价，单个商品或服务的价格
	Amount    float64 `json:"amount"`     // 金额，商品或服务的总金额（数量×单价）
	TaxRate   string  `json:"tax_rate"`   // 税率，适用的增值税税率百分比
	TaxAmount float64 `json:"tax_amount"` // 税额，根据金额和税率计算的增值税额
}

// TransportDetails 表示货物运输发票明细，定义运输服务的详细信息
type TransportDetails struct {
	VehicleType   string `json:"vehicle_type"`   // 运输工具种类，如货车、船舶、飞机等
	VehicleNumber string `json:"vehicle_number"` // 运输工具牌号，运输工具的注册号码或标识
	Departure     string `json:"departure"`      // 起运地，货物运输的起始地点
	Destination   string `json:"destination"`    // 到达地，货物运输的目的地点
	CargoName     string `json:"cargo_name"`     // 运输货物名称，被运输货物的具体名称
}
